In typical dedicated computing systems that run on computing platforms, on which a single operating system (“OS”) is running, the single OS communicates with one or more physical ports of the computing platform device. Communications between the OS and a client device that is communicatively coupled to one of the physical ports is accomplished on a one-to-one basis, and is relatively easy to configure and map (in some cases, using a conventional client device driver). In a virtualized environment or virtualized host computing system, however, there are typically two or more virtual machines (“VMs”) running on the host computing system. Each VM has to share the resources of the host device with each of the other VMs running on the host computing system of the host device. In such a situation, conventional operating system client drivers would be insufficient to provide the proper mapping for effectuating the interconnection or interface between the VM and the physical resources of the host device, or the physical resources of any client devices that are communicatively coupled to ports of the host device. This is because neither any of the VMs nor the host virtualization computing system would know how to properly allocate resources of the host device to each VM, much less to properly allocate resources of any client devices that are communicatively coupled to the ports of the host device, even with the conventional client drivers installed.
Particularly in the context of pluggable devices—including, but not limited to, a small form factor pluggable (“SFP”) device, an enhanced SFP (“SFP+”) device, a compact SFP (“CSFP”) device, a gigabit interface converter (“GBIC”), a universal serial bus (“USB”) pluggable device, a device which is connected to a specific physical port on the host computing system, and/or the like, where at least one of the SFP device, the SFP+ device, or the CSFP device might include, but is not limited to, a SFP network interface device (“NID”), or the like—certain pluggable devices (e.g., SFP NIDs or the like) typically have one or more maintenance entities (“MEs”) or one or more maintenance end points (“MEPs”) thereon that perform Performance and/or Fault Isolation roles, or the like. The one or more MEs or one or more MEPs manage themselves and each has its own OS, and thus are generally not configured to work with a router or switch OS (i.e., OS of a network host device) as a peripheral device or client device, particularly where the network host device has a virtual host computing system on which two or more VMs are running.
Hence, there is a need for more robust and scalable solutions for implementing communications between a host computing system and client devices coupled to one or more ports, and, in particular embodiments, to methods, systems, and computer software for implementing communications between two or more virtual machines (“VMs”) and client devices coupled to one or more ports via a VM-to-Port peripheral device driver.